<?php

	/**
	 * 
	 * Controller principal da aplicacao INDEX
	 * @author Jeferson Rodrigues
	 * @since 20/02/2012
	 *
	 */
	class PessoaController extends Zend_Controller_Action
	{
		/*
		 * Atibutos da classe
		 */
		private $_objModelDbTablePessoa;
		private $_objModelDbTableGenerica;
		
		/**
		 * Inicializa os objetos necessarios para os outros metodos
		 * @see Zend_Controller_Action::init()
		 * @return VOID
		 */
		public function init()
		{
			$this->_objModelDbTablePessoa	= new Application_Model_DbTable_Pessoa();
			$this->_objModelDbTableGenerica	= new Application_Model_DbTable_Generica();
		}
		
		/**
		 * Action da index
		 * @return VOID
		 */
		public function indexAction()
		{
			# Captura informacoes para criar os campos combobox do formulario
			$this->view->arrSexoGn			= $this->_objModelDbTableGenerica->getGenericaByTipo( Application_Model_DbTable_TipoGenerica::CONST_CO_SEXO_GN );
			$this->view->arrEstadoCivilGn	= $this->_objModelDbTableGenerica->getGenericaByTipo( Application_Model_DbTable_TipoGenerica::CONST_CO_ESTADO_CIVIL_GN );
			$this->view->arrCategoriaGn		= $this->_objModelDbTableGenerica->getGenericaByTipo( Application_Model_DbTable_TipoGenerica::CONST_CO_CATEGORIA_GN );
			
			# Cria a sessao e o array para armazenar os dados dos filtros
			$objSessionBusca = new Zend_Session_Namespace( "sessionBusca" );
			
			# Caso tenha sido submetido
			if ( $this->getRequest()->isPost() )
			{
				
				
				$objSessionBusca->unsetAll();
				$objSessionBusca->sessionBusca					= Library::clearDataForm( $this->getRequest()->getPost() , TRUE );
				$objSessionBusca->sessionBusca[ "st_ativo" ]	= ( $this->getRequest()->getParam( "sel_st_ativo" ) == "" ) ? $this->getRequest()->getParam( "sel_st_ativo" ) : $objSessionBusca->sessionBusca[ "st_ativo" ];
				$intNuPage										= 1;
				$this->_helper->redirector( "index" );
			}
			$objPaginator = Zend_Paginator::factory( $this->_objModelDbTablePessoa->listarPessoa( $objSessionBusca->sessionBusca , TRUE ) );
			$objPaginator->setCurrentPageNumber( ( ( isset( $intNuPage ) ) ? $intNuPage : $this->_request->getParam( "page" ) ) );
			$objPaginator->setItemCountPerPage( 10 );
			$objPaginator->setPageRange( 5 );
			$objPaginator->setDefaultScrollingStyle( "Elastic" );
			Zend_View_Helper_PaginationControl::setDefaultViewPartial( "paginator_control.phtml" );
			
			# Caso seja exclusao exclusao de uma pessoa
			if ( ( ! Library::isNullEmpty( $this->_request->getParam( "co_pessoa" ) ) ) && ( Library::isNullEmpty( $this->_request->getParam( "booExcluirTelefone" ) ) ) )
			{
				$this->_objModelDbTablePessoa->excluir( $this->_request->getParam( "co_pessoa" ) );
				$this->_helper->redirector( "index" );
			}
			
			# Caso seja exclusao exclusao de um telefone
			if ( ( ! Library::isNullEmpty( $this->_request->getParam( "co_pessoa" ) ) ) && ( $this->_request->getParam( "booExcluirTelefone" ) == "true" ) )
			{
				$objSessionBusca->sessionCoPessoa = $this->_request->getParam( "co_pessoa" );
				$this->_helper->redirector( "index" );
			}
			
			# Insere os dados da busca e retorna os dados do filtro a view
			$this->view->arrObjPaginator			= $objPaginator;
			$this->view->arrDataForm				= $objSessionBusca->sessionBusca;
			$this->view->coPessoaTelefoneExcluido	= $objSessionBusca->sessionCoPessoa;
			$objSessionBusca->sessionCoPessoa		= "";
		}
		
		/**
		 * Action do novo formulario
		 * @return VOID
		 */
		public function addAction()
		{
			$this->_objFormAlbum->submit->setLabel( "Add" );
			$this->view->form = $this->_objFormAlbum;
			if ( $this->getRequest()->isPost() )
			{
				$formData = $this->getRequest()->getPost();
				if ( $this->_objFormAlbum->isValid( $formData ) )
				{
					$artist	= $this->_objFormAlbum->getValue( "artist" );
					$title	= $this->_objFormAlbum->getValue( "title" );
					$this->_objModelDbTableAlbums->addAlbum( $artist , $title );
					$this->_helper->redirector( "index" );
				}
				else $this->_objFormAlbum->populate( $formData );
			}
		}
		
		/**
		 * Action do formulario de edicao
		 * @return
		 */
		public function editAction()
		{
			$this->_objFormAlbum->submit->setLabel( "Save" );
			$this->view->form = $this->_objFormAlbum;
			if ( $this->getRequest()->isPost() )
			{
				$formData = $this->getRequest()->getPost();
				if ( $this->_objFormAlbum->isValid( $formData ) )
				{
					$id		= (int)$this->_objFormAlbum->getValue( "id" );
					$artist	= $this->_objFormAlbum->getValue( "artist" );
					$title	= $this->_objFormAlbum->getValue( "title" );
					$this->_objModelDbTableAlbums->updateAlbum( $id , $artist , $title );
					$this->_helper->redirector( "index" );
				}
				else $this->_objFormAlbum->populate( $formData );
			}
			else
			{
				$id = $this->_getParam( "id" , 0 );
				if ( $id > 0 ) $this->_objFormAlbum->populate( $this->_objModelDbTableAlbums->getAlbum( $id ) );
			}
		}
		
		/**
		 * Action para exclusao
		 * @return VOID
		 */
		public function deleteAction()
		{
			if ( $this->getRequest()->isPost() )
			{
				$del = $this->getRequest()->getPost( "del" );
				if ( $del == "Yes" )
				{
					$id = $this->getRequest()->getPost( "id" );
					$this->_objModelDbTableAlbums->deleteAlbum( $id );
				}
				$this->_helper->redirector( "index" );
			}
			else
			{
				$id = $this->_getParam( "id" , 0 );
				$this->view->album = $this->_objModelDbTableAlbums->getAlbum( $id );
			}
		}
		
		/**
		 * Action do formulario
		 * @return VOID
		 */
		public function formAction()
		{
			#Captura informacoes para criar os campos combobox do formulario
			$this->view->arrSexoGn			= $this->_objModelDbTableGenerica->getGenericaByTipo( Application_Model_DbTable_TipoGenerica::CONST_CO_SEXO_GN );
			$this->view->arrEstadoCivilGn	= $this->_objModelDbTableGenerica->getGenericaByTipo( Application_Model_DbTable_TipoGenerica::CONST_CO_ESTADO_CIVIL_GN );
			$this->view->arrCategoriaGn		= $this->_objModelDbTableGenerica->getGenericaByTipo( Application_Model_DbTable_TipoGenerica::CONST_CO_CATEGORIA_GN );
			
			#Caso seja edicao carrega os dados do formulario
			if ( ! Library::isNullEmpty( $this->_getParam( "co_pessoa" ) ) ) $this->view->arrDataForm = Library::clearDataForm( $this->_objModelDbTablePessoa->get( $this->_getParam( "co_pessoa" ) ) );
			if ( $this->getRequest()->isPost() )
			{
				$mixResult = $this->_objModelDbTablePessoa->salvar( Library::clearDataForm( $_POST ) );
				if ( ( (int)$mixResult ) == 0 ) $this->view->strMensagem = "Ocorreu um erro e o registro n&atilde;o foi salvo";
				else $this->_redirect( "pessoa" );
			}
		}
		
		/**
		 * 
		 * Enter description here ...
		 */
		public function selecionarPessoaAction()
		{
			$this->view->arrPessoaAutoComplete = $this->_objModelDbTablePessoa->listarPessoaAutoComplete();
			
			#Caso tenha sido submetido
			if ( $this->getRequest()->isPost() )
			{
				$arrDataForm = Library::clearDataForm( $this->getRequest()->getPost() , TRUE );
				$this->view->arrDataForm = $arrDataForm;
				$arrResultPessoa = $this->_objModelDbTablePessoa->listarPessoa( $arrDataForm );
				if ( count( $arrResultPessoa ) == 0 ) $this->view->strMensagem = "Nenhum registro encontrado";
				$this->view->arrResultPessoa = $arrResultPessoa;
			}
		}
		
		public function alterarStatusAction()
		{
			$this->_helper->viewRenderer->setNoRender( TRUE );
			$this->_helper->layout->disableLayout( TRUE );
			
			$intCoPessoa	= $this->getRequest()->getParam( "co_pessoa" );
			$arrInfoPessoa	= $this->_objModelDbTablePessoa->get( $intCoPessoa );
			$strStatusAtual	= $arrInfoPessoa[ "st_ativo" ];
			$arrDataForm	= array
			(
				"co_pessoa"	=> $intCoPessoa ,
				"st_ativo"	=> ( ( $strStatusAtual == "S" ) ? "N" : "S" )
			);
			$arrResult = array
			(
				"st_status"	=> ( ( $this->_objModelDbTablePessoa->salvar( $arrDataForm ) == 1 ) ? "OK" : "FALHA" ),
				"st_ativo"	=> $arrDataForm[ "st_ativo" ] ,
				"co_pessoa"	=> $arrDataForm[ "co_pessoa" ]
			);
			$this->_response->appendBody( Zend_Json::encode( $arrResult ) );
		}
	}